﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;


namespace WindowsFormsApplication2
{

    public partial class Form1 : Form
    {
        
        const int fol = 0;
        private ListView AktywneOkno = null;
        private string AktywnaSciezka;
        private ListView NieAktywneOkno = null;
        private string NieAktywnaSciezka;
        private string sciezka1 = "C:\\"; //lepiej zrobic wlasciwosc odpowiednia, ktora bedzie podawala wartosc pierwszego dysku
        private string sciezka2 = "C:\\"; //lepiej zrobic wlasciwosc odpowiednia, ktora bedzie podawala wartosc pierwszego dysku

        public Form1()
        {
            InitializeComponent();
        }



        private void wyswietl(ListView gdzie, string katalog)
        {
            gdzie.Items.Clear();
            //gdzie.Items[fol].ImageIndex = 0;
            string[] nazwy;
            ListViewItem buf;
            FileInfo plik;
            DirectoryInfo dir;
            ListViewItem go_up = new ListViewItem("...");
            if (!comboBox1.Items.Contains(katalog))
            {
                gdzie.Items.Add(go_up);
                go_up.ImageIndex = 3;
            }

            int i;
            try
            {
                nazwy = Directory.GetDirectories(katalog);
                


                for (i = 0; i < nazwy.Length; i++)
                {
                    dir = new DirectoryInfo(nazwy[i]);
                    buf = new ListViewItem(new string[] { dir.Name, "<DIR>","",dir.CreationTime.ToString() });
                    gdzie.Items.Add(buf);
                    //buf.Tag = Folder;
                    buf.ImageIndex = 0;
                    toolStripStatusLabel2.Text = AktywnaSciezka;
                }

                string nazwapliku;
                int gdziekropka;
                nazwy = Directory.GetFiles(katalog);

                for (i = 0; i < nazwy.Length; i++)
                {
                    plik = new FileInfo(nazwy[i]);
                    nazwapliku = plik.Name;
                    gdziekropka = plik.Name.LastIndexOf('.');
                    if (gdziekropka > 0)
                        nazwapliku = nazwapliku.Substring(0, plik.Name.LastIndexOf('.'));
                    buf = new ListViewItem(new string[] { nazwapliku, plik.Extension.Replace(".", ""),
                    plik.Length.ToString(),plik.CreationTime.ToString() });
                    gdzie.Items.Add(buf);
                    buf.ImageIndex = 1;

                }
            }
            catch
            {
            }
        }

        private void KopiujKatalog(string zrodlo, string cel)
        {
            string[] nazwy;
            if (!Directory.Exists(cel)) Directory.CreateDirectory(cel);
            nazwy = Directory.GetFileSystemEntries(zrodlo);
            foreach (string nazwa in nazwy)
            {
                if (Directory.Exists(nazwa))
                {
                    KopiujKatalog(nazwa, cel + Path.GetFileName(nazwa) + "\\");
                }
                else
                {
                    File.Copy(nazwa, cel + Path.GetFileName(nazwa), true);
                }
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {

            string[] napedy = System.Environment.GetLogicalDrives();
            string[] napedy2 = System.Environment.GetLogicalDrives();
            comboBox1.DataSource = napedy;
            comboBox2.DataSource = napedy2;

            comboBox1.Text = sciezka1;
            comboBox1.Text = sciezka2;
            
            comboBox1.SelectedIndex = comboBox1.Items.IndexOf("C:\\");
            comboBox2.SelectedIndex = comboBox1.Items.IndexOf("C:\\");    

            this.Size = new Size(1000, 600);
            this.columnHeader1.Width = 300;
            this.columnHeader4.Width = 300;
            
          
        }
        
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {

            sciezka1 = comboBox1.Text;
            try
            {
                wyswietl(listView1, sciezka1);
            }
            catch
            {
                //MessageBox.Show("Błąd przy próbie dostępu do napędu", "Błąd",
                    //MessageBoxButtons.OK, MessageBoxIcon.Warning);
                //comboBox1.SelectedIndex = comboBox1.Items.IndexOf("C:\\");
                listView1.Clear();
            }
            
        }
        
        private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
        {
            sciezka2 = comboBox2.Text;
            try
            {
                wyswietl(listView2, sciezka2);
            }
            catch
            {
                //MessageBox.Show("Błąd przy próbie dostępu do napędu", "Błąd",
                    //MessageBoxButtons.OK, MessageBoxIcon.Warning);
                //comboBox2.SelectedIndex = comboBox2.Items.IndexOf("C:\\");
                listView2.Clear();
            }

        }
        
        public void listView1_SelectedIndexChanged(object sender, EventArgs e)
        {
            
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void toolStripStatusLabel1_Click_1(object sender, EventArgs e)
        {
            
        }
        
        private void toolStripButton8_Click(object sender, EventArgs e)
        {
            listView2.View = View.LargeIcon;
                
        }

        private void listView2_ColumnClick(object sender, ColumnClickEventArgs e)
        {
            
        }

        private void listView2_Click(object sender, EventArgs e)
        {

        }

        private void listView2_DoubleClick(object sender, EventArgs e)
        {

        }

        private void toolStripButton9_Click(object sender, EventArgs e)
        {
            listView2.View = View.List;

        }

        private void toolStripButton10_Click(object sender, EventArgs e)
        {
            listView2.View = View.SmallIcon;

        }

        private void toolStripButton11_Click(object sender, EventArgs e)
        {
            listView2.Width = 200;

        }

        private void listView1_Enter(object sender, EventArgs e)
        {
            AktywneOkno = listView1;
            AktywnaSciezka = sciezka1;
            NieAktywneOkno = listView2;
            NieAktywnaSciezka = sciezka2;
        }

        private void listView2_Enter(object sender, EventArgs e)
        {
            AktywneOkno = listView2;
            AktywnaSciezka = sciezka2;
            NieAktywneOkno = listView1;
            NieAktywnaSciezka = sciezka1;
        }
                
        private void Open_Click(object sender, EventArgs e)
        {
            if (AktywneOkno == null) return;
            if (AktywneOkno.SelectedItems.Count != 1) return;
            //listView_MouseDoubleClick(null, null);
        }

        private void Copy_Click(object sender, EventArgs e)
        {
            if (AktywneOkno == null) return;
            for (int i = 0; i < AktywneOkno.SelectedItems.Count; i++)
            {
                if (AktywneOkno.SelectedItems[i].Text == "...")
                    return;
                string zrodlo, cel;
                if (AktywneOkno.SelectedItems[i].SubItems[1].Text == "<DIR>")
                {
                    zrodlo = AktywnaSciezka + AktywneOkno.SelectedItems[i].Text + "\\";
                    cel = NieAktywnaSciezka + AktywneOkno.SelectedItems[i].Text + "\\";
                    KopiujKatalog(zrodlo, cel);
                }
                else
                {
                    zrodlo = AktywnaSciezka + AktywneOkno.SelectedItems[i].Text +
                        "." + AktywneOkno.SelectedItems[i].SubItems[1].Text;
                    cel = NieAktywnaSciezka + AktywneOkno.SelectedItems[i].Text +
                        "." + AktywneOkno.SelectedItems[i].SubItems[1].Text;
                    File.Copy(zrodlo, cel, true);
                }
            }
            wyswietl(NieAktywneOkno, NieAktywnaSciezka);
        }

        private void Movee_Click(object sender, EventArgs e)
        {
            if (AktywneOkno == null) return;
            for (int i = 0; i < AktywneOkno.SelectedItems.Count; i++)
            {
                if (AktywneOkno.SelectedItems[i].Text == "...")
                    return;
                string zrodlo, cel;
                if (AktywneOkno.SelectedItems[i].SubItems[1].Text == "<DIR>")
                {
                    zrodlo = AktywnaSciezka + AktywneOkno.SelectedItems[i].Text + "\\";
                    cel = NieAktywnaSciezka + AktywneOkno.SelectedItems[i].Text + "\\";
                    KopiujKatalog(zrodlo, cel);
                    Directory.Delete(zrodlo, true);
                }
                else
                {
                    zrodlo = AktywnaSciezka + AktywneOkno.SelectedItems[i].Text +
                        "." + AktywneOkno.SelectedItems[i].SubItems[1].Text;
                    cel = NieAktywnaSciezka + AktywneOkno.SelectedItems[i].Text +
                        "." + AktywneOkno.SelectedItems[i].SubItems[1].Text;
                    File.Copy(zrodlo, cel, true);
                    File.Delete(zrodlo);
                }
            }
            wyswietl(listView1, sciezka1);
            wyswietl(listView2, sciezka2);
        }

        private void Delete_Click(object sender, EventArgs e)
        {
            if (AktywneOkno == null) return;
            if (AktywneOkno.SelectedItems[0].Text == "...")
                return;
            DialogResult odp = MessageBox.Show("Czy na pewno?", "Usuń",
                MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (odp != DialogResult.Yes) return;
            string co;
            for (int i = 0; i < AktywneOkno.SelectedItems.Count; i++)
            {
                if (AktywneOkno.SelectedItems[i].SubItems[1].Text == "<DIR>")
                {
                    co = AktywnaSciezka + AktywneOkno.SelectedItems[i].Text;
                    Directory.Delete(co, true);
                }
                else
                {
                    co = AktywnaSciezka + AktywneOkno.SelectedItems[i].Text +
                        "." + AktywneOkno.SelectedItems[i].SubItems[1].Text;
                    File.Delete(co);
                }
            }
            wyswietl(AktywneOkno, AktywnaSciezka);
        }



        private void listView2_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                if (AktywneOkno.SelectedItems[0].Text == "...")
                {
                    AktywnaSciezka = AktywnaSciezka.TrimEnd(new char[] { '\\' }); // usuniecie ostatniego znaku '\'
                    int last; // indeks ostatniego znaku '\'
                    last = AktywnaSciezka.LastIndexOf('\\');
                    AktywnaSciezka = AktywnaSciezka.Substring(0, last + 1);
                    wyswietl(AktywneOkno, AktywnaSciezka);
                }
                else if (AktywneOkno.SelectedItems[0].SubItems[1].Text == "<DIR>")
                {
                    AktywnaSciezka += (AktywneOkno.SelectedItems[0].Text + "\\");
                    wyswietl(AktywneOkno, AktywnaSciezka);
                }
                else
                {
                    string nazwa = AktywnaSciezka +
                        AktywneOkno.SelectedItems[0].Text +
                        "." + AktywneOkno.SelectedItems[0].SubItems[1].Text;
                    try
                    {
                        System.Diagnostics.Process.Start(nazwa);
                    }
                    catch
                    {
                        MessageBox.Show("Nie można otworzyć pliku", "Błąd",
                            MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    return;
                }
                if (AktywneOkno == listView1)
                    sciezka1 = AktywnaSciezka;
                else sciezka2 = AktywnaSciezka;
            }
        }

        private void listView1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                if (AktywneOkno.SelectedItems[0].Text == "...")
                {
                    AktywnaSciezka = AktywnaSciezka.TrimEnd(new char[] { '\\' }); // usuniecie ostatniego znaku '\'
                    int last; // indeks ostatniego znaku '\'
                    last = AktywnaSciezka.LastIndexOf('\\');
                    AktywnaSciezka = AktywnaSciezka.Substring(0, last + 1);
                    wyswietl(AktywneOkno, AktywnaSciezka);
                }
                else if (AktywneOkno.SelectedItems[0].SubItems[1].Text == "<DIR>")
                {
                    AktywnaSciezka += (AktywneOkno.SelectedItems[0].Text + "\\");
                    wyswietl(AktywneOkno, AktywnaSciezka);
                }
                else
                {
                    string nazwa = AktywnaSciezka +
                        AktywneOkno.SelectedItems[0].Text +
                        "." + AktywneOkno.SelectedItems[0].SubItems[1].Text;
                    try
                    {
                        System.Diagnostics.Process.Start(nazwa);
                    }
                    catch
                    {
                        MessageBox.Show("Nie można otworzyć pliku", "Błąd",
                            MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    return;
                }
                if (AktywneOkno == listView1)
                    sciezka1 = AktywnaSciezka;
                else sciezka2 = AktywnaSciezka;
            }
        }

        private void listView1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                if (AktywneOkno.SelectedItems[0].Text == "...")
                {
                    AktywnaSciezka = AktywnaSciezka.TrimEnd(new char[] { '\\' }); // usuniecie ostatniego znaku '\'
                    int last; // indeks ostatniego znaku '\'
                    last = AktywnaSciezka.LastIndexOf('\\');
                    AktywnaSciezka = AktywnaSciezka.Substring(0, last + 1);
                    wyswietl(AktywneOkno, AktywnaSciezka);
                }
                else if (AktywneOkno.SelectedItems[0].SubItems[1].Text == "<DIR>")
                {
                    AktywnaSciezka += (AktywneOkno.SelectedItems[0].Text + "\\");
                    wyswietl(AktywneOkno, AktywnaSciezka);
                }
                else
                {
                    string nazwa = AktywnaSciezka +
                    AktywneOkno.SelectedItems[0].Text +
                        "." + AktywneOkno.SelectedItems[0].SubItems[1].Text;
                    try
                    {
                        System.Diagnostics.Process.Start(nazwa);
                    }
                    catch
                    {
                        MessageBox.Show("Nie można otworzyć pliku", "Błąd",
                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    return;
                }
                if (AktywneOkno == listView1)

                    sciezka1 = AktywnaSciezka;
                else sciezka2 = AktywnaSciezka;
            }
        }

        private void listView2_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                if (AktywneOkno.SelectedItems[0].Text == "...")
                {
                    AktywnaSciezka = AktywnaSciezka.TrimEnd(new char[] { '\\' }); // usuniecie ostatniego znaku '\'
                    int last; // indeks ostatniego znaku '\'
                    last = AktywnaSciezka.LastIndexOf('\\');
                    AktywnaSciezka = AktywnaSciezka.Substring(0, last + 1);
                    wyswietl(AktywneOkno, AktywnaSciezka);
                }
                else if (AktywneOkno.SelectedItems[0].SubItems[1].Text == "<DIR>")
                {
                    AktywnaSciezka += (AktywneOkno.SelectedItems[0].Text + "\\");
                    wyswietl(AktywneOkno, AktywnaSciezka);
                }
                else
                {
                    string nazwa = AktywnaSciezka +
                    AktywneOkno.SelectedItems[0].Text +
                        "." + AktywneOkno.SelectedItems[0].SubItems[1].Text;
                    try
                    {
                        System.Diagnostics.Process.Start(nazwa);
                    }
                    catch
                    {
                        MessageBox.Show("Nie można otworzyć pliku", "Błąd",
                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    return;
                }
                if (AktywneOkno == listView1)

                    sciezka1 = AktywnaSciezka;
                else sciezka2 = AktywnaSciezka;
            }
        }

        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            switch (e.KeyCode)
            {
                case Keys.F3:
                    Open_Click(null, null);
                    break;
                case Keys.F5:
                    Copy_Click(null, null);
                    break;
                case Keys.F6:
                    Movee_Click(null, null);
                    break;
                case Keys.F7:
                    NewFolder_Click(null, null);
                    break;
                case Keys.F8:
                    Delete_Click(null, null);
                    break;
            }

        }

        private void Exit_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void NewFolder_Click(object sender, EventArgs e)
        {
            string wiad = "Podaj nazwe katalogu";
            string tytul = "Nowy katalog";
            string domyslny = "New Folder";

            if (AktywneOkno == null) return;
            
            string nazwa = Microsoft.VisualBasic.Interaction.InputBox(wiad, tytul, domyslny, 100, 100);

            string co;
            co = AktywnaSciezka;

            if (!Directory.Exists(co + nazwa))
            {
                Directory.CreateDirectory(co + nazwa);
                wyswietl(listView1, sciezka1);
                wyswietl(listView2, sciezka2);
            }
            else MessageBox.Show("Folder: " + co + nazwa + " juz istnieje", "Błąd",
                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                                    
        }

        private void statusStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {

        }

        private void label1_Click_1(object sender, EventArgs e)
        {

        }

        private void groupBox2_Enter(object sender, EventArgs e)
        {

        }
        
    }
}